//
//  YHFileManager.h
//  ThunderWarriors
//
//  Created by mac on 13-3-2.
//
//

#ifndef __ThunderWarriors__YHFileManager__
#define __ThunderWarriors__YHFileManager__

#include <iostream>
#include "cocos2d.h"

USING_NS_CC;

#define GET_FILE_MANAGER YHFileManger::sharedInstance()

class YHFileManger{
public:
    static YHFileManger* sharedInstance();
    static void destroyInstance();
    
    //设置资源路径
    void setResourceDirectory(const char *pszDirectoryName);
    //取得资源路径，资源默认路径是包路径
    const char* getResourceDirectory();
    //取得可读写的路径
    const char* getWriteablePath();
    //pszRelativePath可以是文件名或者文件夹名称,该函数会在pszRelativePath前面加上包的全路径
    const char* fullPathFromRelativePath(const char *pszRelativePath);
    //pszFileName是文件名称，pszRelativeFile是文件夹
    const char* fullPathFromRelativeFile(const char *pszFilename, const char *pszRelativeFile);
    //取得文件数据
    unsigned char* getFileData(const char* pszFileName, const char* pszMode, unsigned long * pSize);
    //取得zip文件数据
    unsigned char* getFileDataFromZip(const char* pszZipFilePath, const char* pszFileName, unsigned long * pSize);
    
    //创建文件夹，能够递归建立
    bool createDirectory(const char* newDirectory, const char* atPath);
    
    //删除文件或者文件夹
    bool removeDirectory(const char* fullPath);
    //删除文件夹，atPath是前置目录，relativePath是相对路径
    bool removeDirectory(const char* relativePath, const char* atPath);
    
    //判断文件或者文件夹是否存在,值outIsDirectory返回该path是文件还是文件夹
    bool fileExistsAtPath(const char* fullPath, bool* outIsDirectory);
    //判断文件或者文件夹是否存在,值outIsDirectory返回该path是文件还是文件夹， relativeFile是相对路径，atPath是前置目录
    bool fileExistsAtPath(const char* relativeFile, const char* atPath, bool* outIsDirectory);
    
    //移动文件或者文件夹,from和to都是绝对路径，注意，只能追对一个文件夹 比如可以把Test/Level1 --->Test/Atlas1，
    //而不能Test/Level1--->NewTest/Level1
    bool moveItem(const char* from, const char* to);
    //通过移动文件来实现重命名的功能
    bool renameItem(const char* path,const char* newPath);
    
    //复制文件
    bool copyItem(const char* from, const char* to);
    
    virtual ~ YHFileManger();
protected:
    bool init();
    void uninit();
    YHFileManger();
    
private:
    static YHFileManger* m_Instance;
};

#endif /* defined(__ThunderWarriors__YHFileManager__) */
